package com.lanswon.qzsmk.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.lanswon.qzsmk.model.CardData;
import com.lanswon.qzsmk.vo.CardProductListVo;
import com.lanswon.qzsmk.vo.QueryCardDataVo;
import com.lanswon.qzsmk.vo.SellCardVo;

public interface CardDataMapper {

	/**
	 * 保存
	 * @param record
	 * @return
	 */
    int insert(CardData record);
    
    /**
     * 批量插入
     * @param cardDatas
     * @return
     */
    int batchInsert(@Param("list")List<CardData> cardDatas);
    
    /**
	 * 更新
	 * @param record
	 * @return
	 */
    int update(CardData record);
    
    /**
     * 批量更新
     * @param cardDatas
     * @return
     */
    int batchUpdate(@Param("list")List<CardData> cardDatas);
    
    /**
     * 获取最新的一条数据
     */
    CardData queryNewestObject(@Param("cardPCode")String cardPCode);
    
    /**
     * 根据任务编号和客户编号 查询
     * @param customerNo
     * @param cardTaskNo
     * @return
     */
    CardData queryCardDataByCustomerNoAndCardTaskNo(String customerNo,String cardTaskNo);

    /**
     * 根据任务编号查询一条中的卡面号
     * @param customerNo
     * @param cardTaskNo
     * @return
     */
    CardData queryCardDataByCardTaskNo(String cardTaskNo);
    
    /**
     * 根据任务编号查询
     * @param cardTaskNo
     * @return
     */
    List<CardData> queryCardDataByCardTaskNo_list(String cardTaskNo);
    /**
     * 根据申请批次号查询
     * @param applyBatchNo
     * @return
     */
    List<CardData> queryCardDataByApplyBatchNo_list(String applyBatchNo);
    
    /**
     * 根据任务编号删除
     * @param cardTakNo
     */
    int deleteCardDataByCardTaskNO(String cardTaskNo);
    
    /**
     * 根据id获取
     * @param cardDataId
     * @return
     */
    CardData queryCardDataById(Integer cardDataId);
    
    /**
     * 查询数据
     * @param citizenCardNo 市民卡号
     * @return
     */
    CardData queryCardDataByCitizenCardNo(String citizenCardNo);
    
    /**
     * 查询数据
     * @param bcNo 银行卡号
     * @return
     */
    CardData queryCardDataByBcNo(String bcNo);
    
    /**
     * 空白卡读卡时，确认逻辑是否在库
     * @param citizenCardNo
     * @return
     */
    CardData queryCardDataByCitizenCardNoAtReadBlank(String citizenCardNo);
    
    /**
     * 通过卡号列表查询卡数据
     * @param citizenCardNo 市民卡号
     * @return
     */
    List<CardData> queryCardDataByCitizenCardNoList(@Param("citizenCardNoList")List<String> citizenCardNoList);
    
    /**
     * 查询数据
     * @param citizenCardNo 旧市民卡号
     * @return
     */
    CardData queryCardDataByOldCitizenCardNo(String oldCitizenCardNo);
    
    /**
     * 查询数据
     * @param paperType 证件类型
     * @param paperNo  证件号码
     * @param cardPCode 卡产品
     * @return
     */
    CardData queryCardDataByPaperNo(SellCardVo scv);
    
    /**
     * 查询个人名下的卡信息
     * @param paperType
     * @param paperNo
     * @return
     */
    List<CardData> queryCardDataByPaperNoAndType(String paperType,String paperNo);
    
    /**
     * 查询指定用户指定卡产品 正常卡、挂失卡的信息
     * @param paperType
     * @param paperNo
     * @param cardPCode 
     * @param cardStatus 卡状态
     * @return
     */
    List<CardProductListVo> queryCardDataByPaperNoAndCardStatus_1(@Param("paperType")String paperType,@Param("paperNo")String paperNo,@Param("cardPCode")String cardPCode,@Param("cardStatus1")String cardStatus1,@Param("cardStatus2")String cardStatus2,@Param("cardStatus3")String cardStatus3);
  
    /**
     * 查询指定用户指定卡产品 正常卡的信息
     * @param paperType
     * @param paperNo
     * @param cardPCode 
     * @param cardStatus 卡状态
     * @return
     */
    List<CardData> queryCardDataByPaperNoAndCardStatus(@Param("paperType")String paperType,@Param("paperNo")String paperNo,@Param("cardPCode")String cardPCode,@Param("cardStatus")String cardStatus);
    
    /**
     * 删除
     * @param oldCitizenCardNo 市民卡号
     */
    void deleteCardDataByOldCitizenCardNo(String oldCitizenCardNo);
    
    /**
     * 删除
     * @param newCitizenCardNo 市民卡号
     */
    void deleteCardDataByNewCitizenCardNo(String newCitizenCardNo);
    
    /**
     * 查询用户未办和已办的卡
     * @return
     */
    List<CardData> queryCardDataByPaperNoAndNormal(QueryCardDataVo vo);
	
    /**
     * 查询用户 不为注销的卡
     * @param vo
     * @return
     */
    List<CardData> queryCardDataByStatus(QueryCardDataVo vo);
    
    /**
     * 根据客户编号查询
     * @param customerNo
     * @return
     */
    List<CardData> queryCardDataByCustomerNo(String customerNo);
    
    /**
     * 通过起始段号码查询市民卡号
     * @param string
     * @param string2
     * @return
     */
	List<String> queryCitizenCardNoByStartEnd(@Param("startNo")String startNo, @Param("endNo")String endNo,@Param("taskNo")String taskNo);
	
	
	//20181205 hgl 增加以下6行
	/**
	 * 通过任务好，卡位置号查询卡号
	 * @param taskNoList
	 * @return
	 */
	List<String> queryCitizenCardNoByDistributeOfCenter(@Param("taskNoList")List<String> taskNoList,@Param("cardPosition")String cardPosition);
	
	
	/**
	 * 20181212 hgl 
	 * 通过congtrolID 查询carddata
	 * @param cardControlIDList
	 * @return
	 */
	List<CardData> queryCardDataByCardControlIdList(@Param("cardControlIDList")List<String> cardControlIDList);
	
	/**
	 * 入库，批量更新卡数据表
	 * @param cardDataList
	 */
	void batchUpdateByIncmoing(@Param("cardDataList")List<CardData> cardDataList);
    
	List<String> queryTotalCitizenCardNo();
	
	/**
	 * 入库撤销时，更新卡数据表
	 * @param cardDataList
	 */
	void batchUpdateByIncomingCancel(@Param("cardDataList")List<CardData> cardDataList);
}